'use strict';
module.exports = ({ whiteList }) => { // middleware 挂载的时候调用
  return async (ctx, next) => { // 发请求时在controller之前调用
    if (whiteList.includes(ctx.path)) { // 在白名单出现 不校验token直接调用next走下个controller
      await next();
      return;
    }
    // 走controller之前要先校验token
    // 调用next 走到controller
    try {
      const token = ctx.get('token'); // 获取headers里的token
      if (token) { // 传递token
        const data = await ctx.helper.token.verify(token); // 解密token
        console.log('data-----', data); // 成功走到这 得到用户信息
        ctx.userInfo = data;
        await next(); // 走router--controller
      } else { // 没有传递token 直接结束请求 不走controller
        ctx.status = 401;
        ctx.body = {
          code: 'FAIL',
          status: '401',
          msg: '您没有传递token,没有办法确认身份',
        };
      }
    } catch (error) { // token解密是吧
      console.log('error------', error); // promise reject
      ctx.status = 403; // 解密失败直接结束请求 返回403 不走controller
      ctx.body = {
        code: 'FAIL',
        status: '403',
        msg: 'token解析失败,您暂无权限',
      };
    }
  };
}
;
